Java’da SLF4j ve Log4j Loglama Rehberi: Spring Boot Logging
log4j2.xml yapılandırması gerekir.
Java’da doğru loglama; hata ayıklama, izleme ve performans açısından kritiktir. Bu rehberde SLF4J nedir, Log4j nedir, SLF4J vs Log4j farkları ve Spring Boot logging kurulumunu örneklerle öğreneceksiniz.
Token tabanlı güvenlik ve izleme tarafını güçlendirmek için: Token Nedir? Access ve Refresh Token ve JWT Nedir? rehberlerine de göz atabilirsiniz.
Java’da Loglama Neden Kritik?
Java ile sağlam ve ölçeklenebilir uygulamalar geliştirirken etkili bir loglama altyapısı; hata ayıklama, uygulama izleme ve performans hedefleri için vazgeçilmezdir. Doğru kurgulanmış loglar; üretim ortamındaki sorunları hızlı tespit etmenizi, servis davranışını izlemenizi ve olayları geriye dönük analiz etmenizi sağlar.
SLF4J Nedir? Avantajları Nelerdir?
SLF4J (Simple Logging Facade for Java), Java projelerinde loglama motorlarını soyutlayan bir facade katmanıdır.
Kodunuzda org.slf4j.Logger ile log yazarsınız; altta Logback, Log4j2 veya JUL gibi farklı motorlar kullanılabilir.
- Taşınabilirlik: Log motorunu değiştirdiğinizde uygulama kodunu yeniden yazmanız gerekmez.
- Basit API:
info,warn,errorgibi standart seviyeler. - Performans: Parametrik loglama ile gereksiz string işlemleri azalır.
Log4j Nedir? Neden Tercih Edilir?
Apache Log4j, Java için yüksek performanslı ve esnek bir loglama kütüphanesidir. Çoklu çıktı (console, file vb.), pattern’ler, filtreler ve asenkron loglama gibi gelişmiş özellikler sunar.
SLF4J vs Log4j: Temel Farklar ve Doğru Seçim
| Başlık | SLF4J | Log4j / Log4j2 |
|---|---|---|
| Mimari | Facade (arayüz) | Log motoru |
| Bağımlılık | Kod motor bağımsızlığı | Doğrudan motor API’si / yapılandırma |
| Geçiş Kolaylığı | Çok kolay | API bağımlılığı varsa daha zor |
| Performans | Alttaki motora bağlı | Log4j2 ile yüksek performans |
Spring Boot Logging: SLF4J ve Log4j2 Entegrasyonu
Spring Boot varsayılan olarak Logback ile gelir ve çoğu proje için yeterlidir.
Log4j2 kullanmak istiyorsanız bağımlılıkları değiştirip log4j2.xml dosyanızı eklemeniz gerekir.
application.properties ile Log Seviyesi Yönetimi
logging.level.root=INFO
logging.level.org.springframework=INFO
logging.level.org.hibernate=INFO
Spring Boot ile org.slf4j.Logger Kullanımı
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
private static final Logger log = LoggerFactory.getLogger(HomeController.class);
@GetMapping("/")
public String home() {
log.info("HomeController -> home() çağrıldı");
return "Merhaba, Spring Boot Logging!";
}
}
Parametrik Loglama ile Performans
Parametrik loglama, log seviyesi aktif değilse gereksiz string birleştirmelerini engeller ve performansı korur:
String userId = "42";
log.info("Kullanıcı oturumu başlatıldı: id={}", userId);
log4j2.xml Örneği (Modern Konfigürasyon)
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</Console>
<File name="File" fileName="logs/app.log">
<PatternLayout pattern="%d %-5p [%t] %c - %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
Maven: SLF4J & Log4j2 Bağımlılıkları
<!-- SLF4j API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.16</version>
</dependency>
<!-- Log4j2 Core + SLF4j Köprüsü -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.23.1</version>
</dependency>
Production Best Practices (2026)
- Log seviyelerini (INFO/WARN/ERROR) ortam bazlı yönetin (dev/prod).
- PII / hassas veri (token, şifre, kart vb.) loglamayın veya maskeleyin.
- Correlation ID (traceId) ile istek bazlı izleme yapın.
- Dosya loglarında rolling kullanın (boyut/gün bazlı döndürme).
- Yüksek trafikte async logging (Log4j2 Async) değerlendirin.
Sık Sorulan Sorular (SSS)
SLF4J nedir?
SLF4J, log motorlarının üzerinde çalışan bir facade katmanıdır. Kodunuzu motor bağımsız hale getirir.
Log4j nedir?
Log4j/Log4j2, yüksek performanslı ve özelleştirilebilir bir loglama motorudur; yapılandırma genellikle XML ile yapılır.
Logback vs Log4j2 vs SLF4J farkı nedir?
SLF4J bir arayüz; Logback ve Log4j2 ise log motorlarıdır. Çoğu projede kod SLF4J ile yazılır, motor seçimi altyapıda yapılır.
Spring Boot logging’i nasıl yönetir?
Spring Boot varsayılan olarak Logback kullanır. Ancak SLF4J API sayesinde Log4j2’ye geçiş mümkündür.
Sonuç
Java projelerinde en sağlıklı yaklaşım: kodda SLF4J, altyapıda ihtiyaca göre Logback veya
Log4j2 kullanmaktır. Spring Boot ile seviyeleri application.properties üzerinden yönetebilir,
Log4j2 için log4j2.xml ile güçlü bir yapı kurabilirsiniz.